package dp2.tablet.proyecto.util;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
 
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import dp2.tablet.proyecto.R;
import dp2.tablet.proyecto.Venta;
 
import android.app.Activity;
import android.graphics.Color;
import android.os.AsyncTask;
import android.util.Log;
import android.view.Gravity;
import android.widget.ImageView;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TableRow.LayoutParams;
import android.widget.TextView;
 
public class JSONUbicaciones extends AsyncTask<String, Integer, Integer>{
	
	InputStream is = null;
	String result = "";
	JSONArray jArray = null;

	JSONUbicacionesListener listener;
 
	String strHorario;
	String strZona;
    // constructor
    public JSONUbicaciones() {
 
    }
    
    public void setJSONUbicacionesListener(JSONUbicacionesListener listener){
    	this.listener = listener;
    }
    
    @Override
    protected void onPreExecute() {
    	listener.onConnected();
    }
 
    @Override
	protected Integer doInBackground(String... url) {
    	
    	strHorario=url[0];
    	strZona=url[1];
    	
    	publishProgress(1);
		
        descifrador("http://200.16.7.112:3000/sales/obtenerAsientosZona/"+strHorario+"/"+strZona+".json");
    	return cargarUbicaciones();
	}
    private void descifrador (String url){
    	// Making HTTP request
        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();           
 
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            result = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }
 
        // try parse the string to a JSON object
        try {
        	jArray = new JSONArray(result);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }
 
        // return JSON String
    	
    }
    
    List<TableRow> lstDetallePago=new ArrayList<TableRow>();
    private int cargarUbicaciones(){
    	
		if (jArray.length()!=0){
			Venta venta= (Venta)listener;
        	
        	for(int i=0;i<jArray.length();i++){
            	TableRow tblrDetallePago = new TableRow(venta);
            	tblrDetallePago.setLayoutParams(new LayoutParams(android.view.ViewGroup.LayoutParams.WRAP_CONTENT,android.view.ViewGroup.LayoutParams.WRAP_CONTENT));
            	
				try {
					JSONArray jarrayAux = jArray.getJSONArray(i);
					for (int j=0;j<jarrayAux.length();j++){
	            		
	            		TextView btnUbi=new TextView(venta);

	            		if (jarrayAux.getInt(j)==-1){
	            			btnUbi.setText("");
	            			btnUbi.setBackgroundColor(Color.GRAY);	
	            			
	            		}
	            		else if (jarrayAux.getInt(j)==0){
	            			
	            		}
	            		else{
	            			btnUbi.setText(""+jarrayAux.getInt(j));
	            			btnUbi.setBackgroundColor(Color.parseColor("#c5ced9"));	    
	            			btnUbi.setOnClickListener(venta);  
	            		}	            		
	        			
	        			
	        			LayoutParams lytAux= new LayoutParams(50,40);
	        			lytAux.setMargins(0, 1, 1, 0);
	        			btnUbi.setLayoutParams(lytAux);
	        			btnUbi.setGravity(Gravity.CENTER);
	        			  			
	        			tblrDetallePago.addView(btnUbi);  			
	            	}
	            	lstDetallePago.add(tblrDetallePago);
				} catch (JSONException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
    		}
            publishProgress(2);
            return -1;
		}
		else{
			descifrador("http://200.16.7.112:3000/sales/obtenerCapacidadZona/"+strHorario+"/"+strZona+".json");
			JSONObject jObj;
			int intCapacidad=0;
			int intOcupado=0;
			try {
				jObj = jArray.getJSONObject(0);
				intCapacidad= jObj.getInt("capacidad");
    			intOcupado= jObj.getInt("ocupado");
    			
    			Venta venta= (Venta)listener;
    			TextView btnUbi=new TextView(venta);
    			btnUbi.setText("La Zona seleccionada tiene una capacidad de "+intCapacidad+" asientos y cuenta con "+(intCapacidad-intOcupado)+" disponibles");
    			LayoutParams lytAux= new LayoutParams(android.view.ViewGroup.LayoutParams.WRAP_CONTENT,40);
    			lytAux.setMargins(0, 1, 1, 0);
    			btnUbi.setLayoutParams(lytAux);
    			btnUbi.setGravity(Gravity.CENTER);
    			TableRow tblrDetallePago = new TableRow(venta);
            	tblrDetallePago.setLayoutParams(new LayoutParams(android.view.ViewGroup.LayoutParams.WRAP_CONTENT,android.view.ViewGroup.LayoutParams.WRAP_CONTENT)); 			
    			tblrDetallePago.addView(btnUbi); 
    			lstDetallePago.add(tblrDetallePago);
    			
    			
			} catch (JSONException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			publishProgress(2);
			return (intCapacidad-intOcupado);
		}
    }
    
    @Override
    protected void onProgressUpdate(Integer... values) {
    	switch(values[0]){
    		case 1:
    		break;
    		case 2:
    			listener.onSent(lstDetallePago);
    		break;
    		
    	}
    }
    
    @Override
    protected void onPostExecute(Integer result) {
    	listener.onFinished(jArray);
    }  
}